package ntd.util.config.common.bo;

import cn.hutool.core.util.NumberUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import lombok.Data;
import lombok.experimental.Accessors;

import java.util.HashMap;
import java.util.Map;

@Data
@Accessors(chain = true)
public class RequestInfo {

    private String body;

    private Object data;

    private Map<String, String> params = new HashMap<>();

    private String dataCode;

    /**
     * 补充参数
     * @param key
     * @param val
     */
    public void putParam(String key, String val) {
        params.put(key, val);
    }

    public JSONObject getBodyObj() {
        if (JSONUtil.isTypeJSONObject(this.body)) {
            return JSONUtil.parseObj(this.body);
        }
        return JSONUtil.createObj();
    }

    public JSONArray getBodyArr() {
        return JSONUtil.parseArray(ObjectUtil.defaultIfBlank(this.body, "[]"));
    }

    public String dsId() {
        return this.getParamStr("_dsId");
    }

    public String getParamStr(String key) {
        return ObjectUtil.defaultIfBlank(params.get(key), getBodyObj().getStr(key));
    }

    public int getPage() {
        String page = getParamStr("page");
        if (JSONUtil.isTypeJSON(page)) {
            page = JSONUtil.parseObj(page).getStr("page");
        }
        if (StrUtil.isBlank(page) || !NumberUtil.isNumber(page)) {
            return 0;
        }
        return NumberUtil.parseNumber(page).intValue() - 1;
    }

    public int getSize() {
        String size = getParamStr("size");
        if (StrUtil.isBlank(size)) {
            String page = getParamStr("page");
            if (JSONUtil.isTypeJSON(page)) {
                size = JSONUtil.parseObj(page).getStr("limit");
            }
        }
        if (StrUtil.isBlank(size) || !NumberUtil.isNumber(size)) {
            return 18;
        }
        return NumberUtil.parseNumber(size).intValue();
    }

}
